export const DIFFICULTIES = ['简单', '中等', '困难'] as const
export type Difficulty = typeof DIFFICULTIES[number]

export interface TestCase {
  input: string
  output: string
}

export interface ProblemDetail {
  id: number
  title: string
  description: string
  inputDescription: string
  outputDescription: string
  samples: TestCase[]
  timeLimit: number
  memoryLimit: number
  difficulty: Difficulty
  source: string[]
  hint?: string
}

export interface Problem {
  id: number
  title: string
  source: string[]
  passRate: number
  difficulty: Difficulty
}

export const PROBLEMS: Problem[] = [
  {
    id: 1,
    title: 'A + B',
    source: ['AcWing'],
    passRate: 60.52,
    difficulty: '简单'
  },
  {
    id: 2,
    title: '01背包问题',
    source: ['背包九讲', '模板题'],
    passRate: 60.92,
    difficulty: '简单'
  },
  {
    id: 3,
    title: '完全背包问题',
    source: ['背包九讲', '模板题'],
    passRate: 54.93,
    difficulty: '简单'
  },
  {
    id: 4,
    title: '多重背包问题 I',
    source: ['背包九讲', '模板题'],
    passRate: 56.74,
    difficulty: '简单'
  },
  {
    id: 5,
    title: '多重背包问题 II',
    source: ['背包九讲', '模板题'],
    passRate: 45.20,
    difficulty: '中等'
  },
  {
    id: 6,
    title: '多重背包问题 III',
    source: ['背包九讲'],
    passRate: 43.95,
    difficulty: '困难'
  }
]

export const PROBLEM_DETAILS: Record<number, ProblemDetail> = {
  1: {
    id: 1,
    title: 'A + B',
    description: '输入两个整数，求这两个整数的和是多少。',
    inputDescription: '输入包含两个整数a,b，用空格分隔，0 ≤ a,b ≤ 10^8',
    outputDescription: '输出一个整数，表示这两个数的和',
    samples: [
      {
        input: '3 4',
        output: '7'
      },
      {
        input: '10 20',
        output: '30'
      }
    ],
    timeLimit: 1000,
    memoryLimit: 256,
    difficulty: '简单',
    source: ['AcWing'],
    hint: '这是一道入门题目，直接使用加法运算即可。注意数据范围在int范围内。'
  },
  2: {
    id: 2,
    title: '01背包问题',
    description: `有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。
第 i 件物品的体积是 vi，价值是 wi。
求解将哪些物品装入背包，可使这些物品的总体积不超过背包容量，且总价值最大。
输出最大价值。`,
    inputDescription: `第一行两个整数，N，V，用空格隔开，分别表示物品数量和背包容量。
接下来有 N 行，每行两个整数 vi,wi，用空格隔开，分别表示第 i 件物品的体积和价值。`,
    outputDescription: '输出一个整数，表示最大价值。',
    samples: [
      {
        input: `4 5
1 2
2 4
3 4
4 5`,
        output: '8'
      }
    ],
    timeLimit: 1000,
    memoryLimit: 256,
    difficulty: '简单',
    source: ['背包九讲', '模板题'],
    hint: '这是一道经典的动态规划问题。可以使用二维dp数组或者一维dp数组（优化空间）来解决。'
  }
}
